package cn.tedu.oop2;
/*本类用于测试静态代码块*/
public class TestStatic3 {
    public static void main(String[] args) {
//        System.out.println(12);
        //5.创建对象进行测试
        //Person.play();
        Person p = new Person();
        Person p2 = new Person();       //如果要加载类使用类的资源(静态或普通),先加载类的静态资源-->然后就可以调用静态资源-->再加载普通资源,,
        p.play();
    }
}
//1.创建Person类
class Person{
    String str;
    //6.创建静态代码块
    /*静态代码块:static{}
     * 1.位置:类里方法外
     * 2.执行时机:静态代码块也属于静态资源,随着类的加载而加载,优先于对象里面的普通资源加载
     *           并且静态资源只需要加载一次(因为对象多次加载,所以普通资源调用多次)
     * 3.作用:用于加载那些需要第一时间就加载,并且只加载一次的资源,常用来初始化(如加载登录,游戏初始化自己账号个人信息,,) //第一时间就加载,并且只加载一次的资
     * 执行顺序:
     * 静态代码块->构造代码块->构造方法[对象创建成功]->普通方法->局部代码块*/
    static{
        System.out.println("我是一个静态代码块!");
        //System.out.println(this.str);
    }
    static{ //可以有多个静态代码块,顺序执行
        System.out.println("我是另外一个静态代码块!");
    }

    //2.创建构造代码块
    /*构造代码块:
     * 1.位置:类里方法外
     * 2.执行时机:创建对象时执行,并且优先于构造方法执行
     * 3.作用:用于提取所有构造方法的共性功能*/
    {
        System.out.println("我是构造代码块");
    }
    //7.添加本类的无参构造
    public Person(){
        System.out.println("我是一个无参构造");
    }
    //3.创建普通方法
    public static void play(){
        System.out.println("我是一个普通方法");
        //4.创建局部代码块
        /*局部代码块:
        1.位置:方法里
        2.执行时机:当局部代码块所处的方法被调用时才会执行
        3.作用:用于限制变量的作用范围//作用:用于限制变量的作用范围
        * */
        {
            System.out.println("我是一个局部代码块");
        }
    }
}